Impala SQL-এ EXISTS এবং NOT EXISTS ক্লজগুলো ব্যবহার করে সাবকোয়েরির (subquery) ভিত্তিতে ডেটা ফিল্টার করা যায়। এই দুটি ক্লজ ডেটার উপস্থিতি বা অনুপস্থিতি নির্ধারণ করতে ব্যবহৃত হয় এবং এর মাধ্যমে ডেটা ফিল্টারিং এর ক্ষমতা বাড়ানো সম্ভব হয়, বিশেষত যখন ডেটাবেসের মধ্যে সম্পর্কযুক্ত টেবিলের মধ্যে ডেটা এক্সেস করতে হয়।
EXISTS ক্লজ
EXISTS ক্লজটি সাবকোয়েরির (subquery) মাধ্যমে একটি শর্ত পরীক্ষা করে এবং যদি সাবকোয়েরির কোনো ফলাফল থাকে, তবে তা TRUE রিটার্ন করে। এর মাধ্যমে, মূল কোয়েরি শুধুমাত্র সেই রেকর্ডগুলো ফেরত দেয়, যেখানে সাবকোয়েরির ফলাফল থাকে।
EXISTS এর সিনট্যাক্স
SELECT column1, column2
FROM table_name
WHERE EXISTS (SELECT 1 FROM table_name2 WHERE condition);
এখানে, EXISTS ক্লজটি যাচাই করে যে সাবকোয়েরি কোনো রেকর্ড রিটার্ন করছে কি না। যদি সাবকোয়েরি কোনো রেকর্ড রিটার্ন করে, তবে মূল কোয়েরি সেগুলিকে রিটার্ন করবে।
EXISTS এর কাজের উদাহরণ
ধরা যাক, আমাদের দুটি টেবিল রয়েছে — employees এবং departments। আমরা employees টেবিল থেকে সেই কর্মীদের নাম জানতে চাই যারা এমন একটি বিভাগে কাজ করেন যাদের বেতন ৫০,০০০ বা তার বেশি।
SELECT name
FROM employees
WHERE EXISTS (
SELECT 1
FROM departments
WHERE departments.id = employees.department_id
AND salary >= 50000
);
এখানে, সাবকোয়েরি পরীক্ষা করে যে departments টেবিলের মধ্যে এমন কোনো বিভাগ আছে যেখানে salary ৫০,০০০ বা তার বেশি এবং সে বিভাগের কর্মী employees টেবিলে উপস্থিত। যদি এটি সত্য হয়, তবে সংশ্লিষ্ট কর্মীর নাম রিটার্ন করা হবে।
NOT EXISTS ক্লজ
NOT EXISTS ক্লজটি EXISTS ক্লজের বিপরীত কাজ করে। এটি সাবকোয়েরি থেকে কোনো রেকর্ড না পাওয়া গেলে TRUE রিটার্ন করে, অর্থাৎ, এটি শুধুমাত্র তাদের রেকর্ড ফেরত দেয় যেখানে সাবকোয়েরি শর্ত পূর্ণ করার জন্য কোনো রেকর্ড নেই।
NOT EXISTS এর সিনট্যাক্স
SELECT column1, column2
FROM table_name
WHERE NOT EXISTS (SELECT 1 FROM table_name2 WHERE condition);
এখানে, NOT EXISTS ক্লজটি যাচাই করে যে সাবকোয়েরি কোনো রেকর্ড রিটার্ন করছে না। যদি সাবকোয়েরি কোনো রেকর্ড না রিটার্ন করে, তবে মূল কোয়েরি সেই রেকর্ডগুলো ফেরত দেবে।
NOT EXISTS এর কাজের উদাহরণ
ধরা যাক, আমরা সেই কর্মীদের নাম জানতে চাই যারা এমন কোনো বিভাগে কাজ করেন না, যেখানে বেতন ৫০,০০০ বা তার বেশি।
SELECT name
FROM employees
WHERE NOT EXISTS (
SELECT 1
FROM departments
WHERE departments.id = employees.department_id
AND salary >= 50000
);
এখানে, সাবকোয়েরি পরীক্ষা করে যে কোনো কর্মী departments টেবিলের সেই বিভাগে কাজ করছেন কি না যেখানে বেতন ৫০,০০০ বা তার বেশি। যদি সাবকোয়েরি কোনো রেকর্ড না রিটার্ন করে, তবে NOT EXISTS সেক্ষেত্রে TRUE রিটার্ন করবে এবং সেই কর্মীর নাম মূল কোয়েরিতে রিটার্ন হবে।
EXISTS এবং NOT EXISTS এর মধ্যে পার্থক্য
- EXISTS: যদি সাবকোয়েরি কোনো রেকর্ড রিটার্ন করে, তবে মূল কোয়েরি সেই রেকর্ডগুলো রিটার্ন করবে।
- NOT EXISTS: যদি সাবকোয়েরি কোনো রেকর্ড রিটার্ন না করে, তবে মূল কোয়েরি সেই রেকর্ডগুলো রিটার্ন করবে।
এছাড়া, EXISTS ক্লজটি কোয়েরি প্ল্যানের পারফরম্যান্সে কিছুটা ভালো কাজ করতে পারে কারণ এটি কেবল প্রথম ম্যাচ পাওয়া পর্যন্ত সাবকোয়েরি চালায়, কিন্তু NOT EXISTS সাবকোয়েরির সমস্ত রেকর্ড স্ক্যান করতে পারে।
সারাংশ
EXISTS এবং NOT EXISTS ক্লজগুলো Impala SQL-এ ডেটা ফিল্টারিংয়ের জন্য অত্যন্ত শক্তিশালী সরঞ্জাম। এগুলির মাধ্যমে সাবকোয়েরির ফলাফল যাচাই করা হয় এবং শুধু সেই রেকর্ডগুলো রিটার্ন করা হয় যেগুলি শর্ত পূর্ণ করে। EXISTS ব্যবহৃত হয় যখন সাবকোয়েরি কোনো রেকর্ডের উপস্থিতি যাচাই করতে, এবং NOT EXISTS ব্যবহৃত হয় যখন সাবকোয়েরি কোনো রেকর্ডের অনুপস্থিতি যাচাই করতে। এই দুটি ক্লজ সম্পর্কিত টেবিলের মধ্যে ডেটা সম্পর্কের উপর ভিত্তি করে কাজ করে এবং ডেটা প্রক্রিয়াকরণে গুরুত্বপূর্ণ ভূমিকা পালন করে।
Read more